package main

import (
	"fmt"
	"time"
)

func hello(ch chan string) {
	fmt.Println("执行一个耗时任务....")
	time.Sleep(4 * time.Second) //和上例的主要区别
	fmt.Println("任务完成，马上发送数据")
	ch <- "hi"
}

func main() {
	pipline := make(chan string)
	fmt.Println("main中，准备创建协程")
	go hello(pipline) //非阻塞
	fmt.Println("main中，已创建协程，开始接收数据：")
	re := <-pipline //阻塞4秒，这里的意义可以理解为，在等待一个信号，即任务完成的信号。或者说等待任务执行完成的结果。
	fmt.Println("接收到的数据是:", re)
	fmt.Println("main 结束") //
}
